/*
 * @Author: jqgao2
 * @Date: 2022-10-25 10:15:38
 * @LastEditTime: 2022-10-25 11:10:47
 * @Description: 统一封装axios
 * @FilePath: \vue2tem\src\plugins\axios.js
 * @LastEditors: jqgao2
 */
import axios from "axios";
import { Message } from "element-ui";

// 默认配置
const instance = axios.create({
  baseURL: process.env.baseURL,
  timeout: 30 * 1000,
});

// 添加请求拦截器
instance.interceptors.request.use(
  function (config) {
    // 在发送请求之前做些什么
    return config;
  },
  function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
  }
);
// 添加响应拦截器
instance.interceptors.response.use(
  function (response) {
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么
    return response;
  },
  function (error) {
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    return Promise.reject(error);
  }
);

const httpRequest = (url, data, method = "post", showErrTip = true, other) => {
  return new Promise((resolve, reject) => {
    axios({
      url,
      method,
      data: method === "get" ? null : data,
      params: method === "get" ? data : null,
      ...other,
    })
      .then((res) => {
        resolve(res);
      })
      .catch((err) => {
        if (showErrTip) {
          // TODO 各项目依据自身数据结构配置此项
          Message.error("err");
        }
        reject(err);
      });
  });
};

export default httpRequest;
